package com.ayu.commentbackend.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;

@Configuration
@EnableAsync
public class AsyncConfig {
    @Bean("aiTaskExecutor")
    public Executor aiTaskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);       // 常驻AI处理线程数
        executor.setMaxPoolSize(10);       // 突发流量时最大线程
        executor.setQueueCapacity(100);     // 排队任务数
        executor.setWaitForTasksToCompleteOnShutdown(true);
        executor.setRejectedExecutionHandler(
                new ThreadPoolExecutor.CallerRunsPolicy()); // 降级策略
        executor.initialize();
        return executor;
    }
}
/**
 * 工作流程：
 * 当任务数量少于或等于5时，任务将由corePoolSize中的线程处理。
 * 当任务数量超过5但少于或等于10时，线程池将创建新线程来处理这些任务，直到线程数达到maxPoolSize。
 * 当任务数量超过10时，新任务将被放入workQueue中等待执行。
 * 当workQueue中的任务数量达到100时，并且所有线程都在忙碌，新提交的任务将根据rejectedHandler的策略处理。
 * 在这种情况下，CallerRunsPolicy将使调用者线程执行该任务。
 */